package java_0308;

import java.util.*;

/**
 * 一个整型数组里除了两个数字之外，其他的数字都出现了两次。
 * 请写程序找出这两个只出现一次的数字
 * 分析：
 * 异或：相异为真相同为假，0和任何数异或等于他本身
 */
public class FindOnceNumber {
    public static void findNumberAppearOnce(int[] arr){
        Map<Integer,Integer> map=new HashMap<>();
        for(int i:arr){
            map.put(i,map.getOrDefault(i,0)+1);
        }
        //再次遍历Map
        List<Integer> ret=new ArrayList<>();
        Set<Map.Entry<Integer,Integer>> entrySet=map.entrySet();
        for (Map.Entry<Integer,Integer> entry:entrySet){
            if (entry.getValue()==1){
                ret.add(entry.getKey());
            }
        }
//        for(Map.Entry<Integer,Integer> entry: map.entrySet()){
//            if (entry.getValue()==1){
//                ret.add(entry.getKey());
//            }
//        }
        for (int temp:ret) {
            System.out.print(" "+temp);
        }

    }
    public static void main(String[] args) {
        int[] arr={5,4,6,8,7,9,4,6,7,9};
        findNumberAppearOnce(arr);
    }
}
